In [81]:
# Librerias
!pip install gdown
!pip install matplotlib seaborn
Requirement already satisfied: gdown in c:\users\user1\anaconda3\lib\site-packages (5.2.0)
Requirement already satisfied: beautifulsoup4 in c:\users\user1\anaconda3\lib\site-packages (from gdown) (4.12.3)
Requirement already satisfied: filelock in c:\users\user1\anaconda3\lib\site-packages (from gdown) (3.13.1)
Requirement already satisfied: requests[socks] in c:\users\user1\anaconda3\lib\site-packages (from gdown) (2.32.3)
Requirement already satisfied: tqdm in c:\users\user1\anaconda3\lib\site-packages (from gdown) (4.66.5)
Requirement already satisfied: soupsieve>1.2 in c:\users\user1\anaconda3\lib\site-packages (from beautifulsoup4->gdown) (2.5)
Requirement already satisfied: charset-normalizer<4,>=2 in c:\users\user1\anaconda3\lib\site-packages (from requests[socks]->gdown) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in c:\users\user1\anaconda3\lib\site-packages (from requests[socks]->gdown) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\user1\anaconda3\lib\site-packages (from requests[socks]->gdown) (2.2.3)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\user1\anaconda3\lib\site-packages (from requests[socks]->gdown) (2024.8.30)
Requirement already satisfied: PySocks!=1.5.7,>=1.5.6 in c:\users\user1\anaconda3\lib\site-packages (from requests[socks]->gdown) (1.7.1)
Requirement already satisfied: colorama in c:\users\user1\anaconda3\lib\site-packages (from tqdm->gdown) (0.4.6)
Requirement already satisfied: matplotlib in c:\users\user1\anaconda3\lib\site-packages (3.9.2)
Requirement already satisfied: seaborn in c:\users\user1\anaconda3\lib\site-packages (0.13.2)
Requirement already satisfied: contourpy>=1.0.1 in c:\users\user1\anaconda3\lib\site-packages (from matplotlib) (1.2.0)
Requirement already satisfied: cycler>=0.10 in c:\users\user1\anaconda3\lib\site-packages (from matplotlib) (0.11.0)
Requirement already satisfied: fonttools>=4.22.0 in c:\users\user1\anaconda3\lib\site-packages (from matplotlib) (4.51.0)
Requirement already satisfied: kiwisolver>=1.3.1 in c:\users\user1\anaconda3\lib\site-packages (from matplotlib) (1.4.4)
Requirement already satisfied: numpy>=1.23 in c:\users\user1\anaconda3\lib\site-packages (from matplotlib) (1.26.4)
Requirement already satisfied: packaging>=20.0 in c:\users\user1\anaconda3\lib\site-packages (from matplotlib) (24.1)
Requirement already satisfied: pillow>=8 in c:\users\user1\anaconda3\lib\site-packages (from matplotlib) (10.4.0)
Requirement already satisfied: pyparsing>=2.3.1 in c:\users\user1\anaconda3\lib\site-packages (from matplotlib) (3.1.2)
Requirement already satisfied: python-dateutil>=2.7 in c:\users\user1\anaconda3\lib\site-packages (from matplotlib) (2.9.0.post0)
Requirement already satisfied: pandas>=1.2 in c:\users\user1\anaconda3\lib\site-packages (from seaborn) (2.2.2)
Requirement already satisfied: pytz>=2020.1 in c:\users\user1\anaconda3\lib\site-packages (from pandas>=1.2->seaborn) (2024.1)
Requirement already satisfied: tzdata>=2022.7 in c:\users\user1\anaconda3\lib\site-packages (from pandas>=1.2->seaborn) (2023.3)
Requirement already satisfied: six>=1.5 in c:\users\user1\anaconda3\lib\site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)
In [82]:
import gdown
import pandas as pd

# URL del archivo en Google Drive
file_id = '1ncCoyFiMpp1uXSrx8UEv5MhLJ6ej02ln'
url = f'https://drive.google.com/uc?id={file_id}'

# Descargar el archivo
gdown.download(url, 'REGISTRO_DATOS.csv', quiet=False)

# Cargar el archivo CSV en un DataFrame
df = pd.read_csv('REGISTRO_DATOS.csv', delimiter=',')

# Mostrar las primeras filas del DataFrame
print(df.head())
Downloading...
From: https://drive.google.com/uc?id=1ncCoyFiMpp1uXSrx8UEv5MhLJ6ej02ln
To: C:\Users\User1\REGISTRO_DATOS.csv
100%|██████████| 2.56M/2.56M [00:00<00:00, 3.94MB/s]
   Unnamed: 0   id                             department  timecreated  \
0      121884  552   Departamento De Español y Literatura   1709549942   
1      121885  319  Departamento De Informática Educativa   1709551598   
2      121886  568          Departamento de Salud Pública   1709551692   
3      121887   29                                    NaN   1709555966   
4      121888  366             Dpto De Ciencias Naturales   1709556334   

              rol                                             userid  
0  editingteacher  fa5d171c9280388b26a2569e9fccc7683ab3ec70b685b3...  
1  editingteacher  6620b5d17f18eed1eb4d2d1cf4d7fe20c1dc49f0d6605d...  
2  editingteacher  eca7bf3a91ac9f5b18f1bc05d3c44326c4a70f9d746a1b...  
3  editingteacher  d6fccd5d02351b1c921506167eb6bd49e8203158ddd342...  
4  editingteacher  9a94168caabfa08ab2e00e84ccae436d30338af9eedc28...  

In [83]:
df
Out[83]:
Unnamed: 0 id department timecreated rol userid
0 121884 552 Departamento De Español y Literatura 1709549942 editingteacher fa5d171c9280388b26a2569e9fccc7683ab3ec70b685b3...
1 121885 319 Departamento De Informática Educativa 1709551598 editingteacher 6620b5d17f18eed1eb4d2d1cf4d7fe20c1dc49f0d6605d...
2 121886 568 Departamento de Salud Pública 1709551692 editingteacher eca7bf3a91ac9f5b18f1bc05d3c44326c4a70f9d746a1b...
3 121887 29 NaN 1709555966 editingteacher d6fccd5d02351b1c921506167eb6bd49e8203158ddd342...
4 121888 366 Dpto De Ciencias Naturales 1709556334 editingteacher 9a94168caabfa08ab2e00e84ccae436d30338af9eedc28...
... ... ... ... ... ... ...
18944 459318 16465 DEPARTAMENTO DE FISICA Y ELECTRONICA D P 1713366104 editingteacher 1ba19ebd2a8fa609b7beb085d0b7f30f0e262859b475f8...
18945 459321 16465 DEPARTAMENTO DE FISICA Y ELECTRONICA D P 1713367124 editingteacher 1ba19ebd2a8fa609b7beb085d0b7f30f0e262859b475f8...
18946 459700 16465 DEPARTAMENTO DE FISICA Y ELECTRONICA D P 1713827512 editingteacher 1ba19ebd2a8fa609b7beb085d0b7f30f0e262859b475f8...
18947 459956 16465 DEPARTAMENTO DE FISICA Y ELECTRONICA D P 1714218380 editingteacher 1ba19ebd2a8fa609b7beb085d0b7f30f0e262859b475f8...
18948 460426 16465 DEPARTAMENTO DE FISICA Y ELECTRONICA D P 1715270429 editingteacher 1ba19ebd2a8fa609b7beb085d0b7f30f0e262859b475f8...

18949 rows × 6 columns

In [84]:
# Contenido de la variable 'department', obviamente hay errores de ortografia
df['department'].unique()
Out[84]:
array(['Departamento De Español y Literatura',
       'Departamento De Informática Educativa',
       'Departamento de Salud Pública', nan, 'Dpto De Ciencias Naturales',
       'Departamento De Ciencias Jurídicas',
       'Departamento De Ingeniería Industrial',
       'Dpto De Ing Agronómica Y Desarroll Rural',
       'Dpto Ciencias Administrativas', 'Departamento De Enfermería',
       'Departamento De Idiomas Extranjeros', 'Departamento De Química',
       'Dpto De Ing De Sistemas Y Telecomunicaci',
       'Departamento De Matemáticas Y Estadístic',
       'Departamento de Regencía Y Farmacia', 'Departamento De Biología',
       'Departamento de Psicopedagogía', 'Dpto De Ingeniería Ambiental',
       'Dpto De Cultura Física, Recreac Y Deport',
       'Departamento De Ciencias Pecuarías',
       'Departamento De Geografía Y Medio Ambien',
       'Departamento De Bacteriología',
       'Departamento de Física y Electrónica', ' Ingeniería Mecánica',
       'ENFERMERÍA', 'Departamento De Ciencias Sociales', 'ENFERMERÍA ',
       'Departamento de Ciencias Acuícolas', 'Lic en Informática',
       'Regencia de Farmacia', 'Departamento De Ingeniería de Alimentos',
       'Departamento de Ingeniería Mecánica', 'Informática',
       'Ingeniería Ambiental ', 'Departamento de Psicopedagoga',
       'Departamento de Artes', 'CIENCIAS JURÍDICAS', 'INFORMÁTICA',
       'Departamento De Ciencias Jurdicas',
       'DEPARTAMENTO DE BACTERIOLOGIA D P',
       'Departamento de Salud Pblica', 'DEPARTAMENTO DE ENFERMERIA D P',
       'MATEMATICA Y ESTADISTICA', 'ADMINISTRACIÓN EN SALUD', 'GEOGRAFÍA',
       'PSICOPEDAGOGIA', 'Ingeniería ',
       'DEPARTAMENTO DE IDIOMAS EXTRANJEROS D P',
       'DECANATURA FACULTAD DE CIENCIAS AGRICOLAS D P',
       'Administración en Salud', 'Fsica', 'INFORMATICA',
       'Ingeniería Ambiental', 'DEPARTAMENTO DE SALUD PUBLICA D P',
       'DEPARTAMENTO DE CIENCIAS ACUICOLAS D P',
       'Departamento De Informtica Educativa',
       'Departamento De Geografa Y Medio Ambien',
       'Dpto De Cultura Fsica, Recreac Y Deport', 'BIOLOGIA',
       'DEPARTAMENTO DE INGENIERIA AMBIENTAL D P',
       'DEPARTAMENTO DE FISICA Y ELECTRONICA D P'], dtype=object)
In [85]:
# 1. Clear the Department column / Limpiar la columna Departamento
# Se creo un diccionario para mapear nombres incorrectos a nombres correctos
correcciones = {
    'Departamento De Español y Literatura': 'Departamento de Español y Literatura',
    'Departamento De Informática Educativa': 'Departamento de Informática Educativa',
    'Departamento de Salud Pública': 'Departamento de Salud Pública',
    'Dpto De Ciencias Naturales': 'Departamento de Ciencias Naturales',
    'Departamento De Ciencias Jurídicas': 'Departamento de Ciencias Jurídicas',
    'Departamento De Ingeniería Industrial': 'Departamento de Ingeniería Industrial',
    'Dpto De Ing Agronómica Y Desarroll Rural': 'Departamento de Ingeniería Agronómica y Desarrollo Rural',
    'Dpto Ciencias Administrativas': 'Departamento de Ciencias Administrativas',
    'Departamento De Enfermería': 'Departamento de Enfermería',
    'Departamento De Idiomas Extranjeros': 'Departamento de Idiomas Extranjeros',
    'Departamento De Química': 'Departamento de Química',
    'Dpto De Ing De Sistemas Y Telecomunicaci': 'Departamento de Ingeniería de Sistemas y Telecomunicaciones',
    'Departamento De Matemáticas Y Estadístic': 'Departamento de Matemáticas y Estadística',
    'Departamento de Regencía Y Farmacia': 'Departamento de Regencia y Farmacia',
    'Departamento De Biología': 'Departamento de Biología',
    'Departamento de Psicopedagogía': 'Departamento de Psicopedagogía',
    'Dpto De Ingeniería Ambiental': 'Departamento de Ingeniería Ambiental',
    'Dpto De Cultura Física, Recreac Y Deport': 'Departamento de Cultura Física, Recreación y Deportes',
    'Departamento De Ciencias Pecuarías': 'Departamento de Ciencias Pecuarias',
    'Departamento De Geografía Y Medio Ambien': 'Departamento de Geografía y Medio Ambiente',
    'Departamento De Bacteriología': 'Departamento de Bacteriología',
    'Departamento de Física y Electrónica': 'Departamento de Física y Electrónica',
    ' Ingeniería Mecánica': 'Departamento de Ingeniería Mecánica',
    'ENFERMERÍA': 'Departamento de Enfermería',
    'Departamento De Ciencias Sociales': 'Departamento de Ciencias Sociales',
    'ENFERMERÍA ': 'Departamento de Enfermería',
    'Departamento de Ciencias Acuícolas': 'Departamento de Ciencias Acuícolas',
    'Lic en Informática': 'Departamento de Informática',
    'Regencia de Farmacia': 'Departamento de Regencia de Farmacia',
    'Departamento De Ingeniería de Alimentos': 'Departamento de Ingeniería de Alimentos',
    'Departamento de Ingeniería Mecánica': 'Departamento de Ingeniería Mecánica',
    'Informática': 'Departamento de Informática',
    'Ingeniería Ambiental ': 'Departamento de Ingeniería Ambiental',
    'Departamento de Psicopedagoga': 'Departamento de Psicopedagogía',
    'Departamento de Artes': 'Departamento de Artes',
    'CIENCIAS JURÍDICAS': 'Departamento de Ciencias Jurídicas',
    'INFORMÁTICA': 'Departamento de Informática',
    'Departamento De Ciencias Jurdicas': 'Departamento de Ciencias Jurídicas',
    'DEPARTAMENTO DE BACTERIOLOGIA D P': 'Departamento de Bacteriología',
    'Departamento de Salud Pblica': 'Departamento de Salud Pública',
    'DEPARTAMENTO DE ENFERMERIA D P': 'Departamento de Enfermería',
    'MATEMATICA Y ESTADISTICA': 'Departamento de Matemáticas y Estadística',
    'ADMINISTRACIÓN EN SALUD': 'Departamento de Administración en Salud',
    'GEOGRAFÍA': 'Departamento de Geografía',
    'PSICOPEDAGOGIA': 'Departamento de Psicopedagogía',
    'Ingeniería ': 'Departamento de Ingeniería',
    'DEPARTAMENTO DE IDIOMAS EXTRANJEROS D P': 'Departamento de Idiomas Extranjeros',
    'DECANATURA FACULTAD DE CIENCIAS AGRICOLAS D P': 'Decanatura de la Facultad de Ciencias Agrícolas',
    'Administración en Salud': 'Departamento de Administración en Salud',
    'Fsica': 'Departamento de Física',
    'INFORMATICA': 'Departamento de Informática',
    'Ingeniería Ambiental': 'Departamento de Ingeniería Ambiental',
    'DEPARTAMENTO DE SALUD PUBLICA D P': 'Departamento de Salud Pública',
    'DEPARTAMENTO DE CIENCIAS ACUICOLAS D P': 'Departamento de Ciencias Acuáticas',
    'Departamento De Informtica Educativa': 'Departamento de Informática Educativa',
    'Departamento De Geografa Y Medio Ambien': 'Departamento de Geografía y Medio Ambiente',
    'Dpto De Cultura Fsica, Recreac Y Deport': 'Departamento de Cultura Física, Recreación y Deportes',
    'BIOLOGIA': 'Departamento de Biología',
    'DEPARTAMENTO DE INGENIERIA AMBIENTAL D P': 'Departamento de Ingeniería Ambiental',
    'DEPARTAMENTO DE FISICA Y ELECTRONICA D P': 'Departamento de Física y Electrónica'
}

# Aplicar las correcciones al DataFrame
df['department'] = df['department'].replace(correcciones)

# Mostrar los valores únicos para confirmar la corrección
print(df['department'].unique())

# Crear un nuevo DataFrame con los departamentos corregidos
nuevo_df = df.copy()
['Departamento de Español y Literatura'
 'Departamento de Informática Educativa' 'Departamento de Salud Pública'
 nan 'Departamento de Ciencias Naturales'
 'Departamento de Ciencias Jurídicas'
 'Departamento de Ingeniería Industrial'
 'Departamento de Ingeniería Agronómica y Desarrollo Rural'
 'Departamento de Ciencias Administrativas' 'Departamento de Enfermería'
 'Departamento de Idiomas Extranjeros' 'Departamento de Química'
 'Departamento de Ingeniería de Sistemas y Telecomunicaciones'
 'Departamento de Matemáticas y Estadística'
 'Departamento de Regencia y Farmacia' 'Departamento de Biología'
 'Departamento de Psicopedagogía' 'Departamento de Ingeniería Ambiental'
 'Departamento de Cultura Física, Recreación y Deportes'
 'Departamento de Ciencias Pecuarias'
 'Departamento de Geografía y Medio Ambiente'
 'Departamento de Bacteriología' 'Departamento de Física y Electrónica'
 'Departamento de Ingeniería Mecánica' 'Departamento de Ciencias Sociales'
 'Departamento de Ciencias Acuícolas' 'Departamento de Informática'
 'Departamento de Regencia de Farmacia'
 'Departamento de Ingeniería de Alimentos' 'Departamento de Artes'
 'Departamento de Administración en Salud' 'Departamento de Geografía'
 'Departamento de Ingeniería'
 'Decanatura de la Facultad de Ciencias Agrícolas'
 'Departamento de Física' 'Departamento de Ciencias Acuáticas']
In [86]:
# Nuevo dataframe con 'department' Correjido
nuevo_df
Out[86]:
Unnamed: 0 id department timecreated rol userid
0 121884 552 Departamento de Español y Literatura 1709549942 editingteacher fa5d171c9280388b26a2569e9fccc7683ab3ec70b685b3...
1 121885 319 Departamento de Informática Educativa 1709551598 editingteacher 6620b5d17f18eed1eb4d2d1cf4d7fe20c1dc49f0d6605d...
2 121886 568 Departamento de Salud Pública 1709551692 editingteacher eca7bf3a91ac9f5b18f1bc05d3c44326c4a70f9d746a1b...
3 121887 29 NaN 1709555966 editingteacher d6fccd5d02351b1c921506167eb6bd49e8203158ddd342...
4 121888 366 Departamento de Ciencias Naturales 1709556334 editingteacher 9a94168caabfa08ab2e00e84ccae436d30338af9eedc28...
... ... ... ... ... ... ...
18944 459318 16465 Departamento de Física y Electrónica 1713366104 editingteacher 1ba19ebd2a8fa609b7beb085d0b7f30f0e262859b475f8...
18945 459321 16465 Departamento de Física y Electrónica 1713367124 editingteacher 1ba19ebd2a8fa609b7beb085d0b7f30f0e262859b475f8...
18946 459700 16465 Departamento de Física y Electrónica 1713827512 editingteacher 1ba19ebd2a8fa609b7beb085d0b7f30f0e262859b475f8...
18947 459956 16465 Departamento de Física y Electrónica 1714218380 editingteacher 1ba19ebd2a8fa609b7beb085d0b7f30f0e262859b475f8...
18948 460426 16465 Departamento de Física y Electrónica 1715270429 editingteacher 1ba19ebd2a8fa609b7beb085d0b7f30f0e262859b475f8...

18949 rows × 6 columns

In [87]:
# 2. Show total login by department and bar graph / Mostrar el total de inicios de sesión por departamento y gráfico de barras
import matplotlib.pyplot as plt

# Contar el total de inicios de sesión por departamento
inicios_sesion_por_departamento = df['department'].value_counts()

# Mostrar los resultados en forma de lista
print("Total de Inicios de Sesión por Departamento:")
for departamento, total in inicios_sesion_por_departamento.items():
    print(f"{departamento}: {total}")

# Crear un gráfico de barras
plt.figure(figsize=(12, 6))  # Ajusta el tamaño de la figura
inicios_sesion_por_departamento.plot(kind='bar', color='skyblue')

# Añadir títulos y etiquetas
plt.title('Total de Inicios de Sesión por Departamento', fontsize=16)
plt.xlabel('Departamento', fontsize=14)
plt.ylabel('Número de Inicios de Sesión', fontsize=14)
plt.xticks(rotation=45, ha='right')  # Rotar las etiquetas del eje x para mejor legibilidad

# Mostrar el gráfico
plt.tight_layout()  # Ajustar el layout para evitar superposiciones
plt.show()
Total de Inicios de Sesión por Departamento:
Departamento de Salud Pública: 2920
Departamento de Ciencias Administrativas: 1983
Departamento de Informática Educativa: 1624
Departamento de Ingeniería de Sistemas y Telecomunicaciones: 1147
Departamento de Psicopedagogía: 958
Departamento de Ingeniería Industrial: 811
Departamento de Biología: 725
Departamento de Idiomas Extranjeros: 715
Departamento de Matemáticas y Estadística: 702
Departamento de Bacteriología: 668
Departamento de Ingeniería Ambiental: 620
Departamento de Geografía y Medio Ambiente: 590
Departamento de Química: 583
Departamento de Ingeniería de Alimentos: 513
Departamento de Ingeniería Mecánica: 475
Departamento de Física y Electrónica: 374
Departamento de Enfermería: 335
Departamento de Ciencias Jurídicas: 326
Departamento de Ingeniería Agronómica y Desarrollo Rural: 312
Departamento de Ciencias Naturales: 211
Departamento de Informática: 198
Departamento de Ciencias Pecuarias: 189
Departamento de Cultura Física, Recreación y Deportes: 159
Departamento de Ciencias Acuícolas: 137
Departamento de Administración en Salud: 103
Departamento de Ciencias Sociales: 101
Departamento de Regencia y Farmacia: 92
Departamento de Español y Literatura: 70
Departamento de Física: 59
Departamento de Geografía: 47
Decanatura de la Facultad de Ciencias Agrícolas: 37
Departamento de Regencia de Farmacia: 26
Departamento de Ingeniería: 19
Departamento de Artes: 16
Departamento de Ciencias Acuáticas: 1
No description has been provided for this image
In [88]:
# 3. Display the total number of logins per teacher in a specific program / 
# Mostrar el número total de inicios de sesión por profesor en un programa específico
# Crear un DataFrame vacío para almacenar los resultados
resultados_totales = pd.DataFrame()

# Obtener la lista de departamentos únicos
departamentos_unicos = nuevo_df['department'].unique()

# Iterar sobre cada departamento
for departamento in departamentos_unicos:
    # Filtrar el nuevo DataFrame por el departamento actual
    df_departamento = nuevo_df[nuevo_df['department'] == departamento]
    
    # Agrupar por 'userid' y contar el número de inicios de sesión
    inicios_sesion_por_docente = df_departamento.groupby('userid').size().reset_index(name='total_inicios_sesion')
    
    # Añadir el departamento como una nueva columna
    inicios_sesion_por_docente['department'] = departamento
    
    # Concatenar los resultados al DataFrame total
    resultados_totales = pd.concat([resultados_totales, inicios_sesion_por_docente], ignore_index=True)

# Mostrar los resultados totales
print(resultados_totales)
                                                userid  total_inicios_sesion  \
0    21ad121f568fae92e2584da468fb6171bf6e9c9b3bc60d...                     6   
1    4f04556e743fa619a9a62367e1490a21bc3def683610b0...                     7   
2    63048871145b9c0412a90023f05858e375e7d770af6174...                     3   
3    b43b6e3f02f385b2b1fac1bb1ac29f299d5ff32b503982...                     5   
4    f7024c81b7009ba82ebd1ee9a02cee34a5f0afd3e8c118...                     1   
..                                                 ...                   ...   
505  68a75a89fe744832b7cf22f6cf30bf05f11331a2933c34...                    19   
506  c49d21fc4ea12bd51c426d61b6abeac46122d88cf504e8...                     1   
507  ec77faa4de66380b4d6265dc6615b89e2f0a494d106b87...                    36   
508  1b60c5e18937fcc0fa111a0ee8d1a022c6a6628a9c3d66...                    59   
509  9220ce3692a59f2d55f81e1893901fdeff857612401ff3...                     1   

                                          department  
0               Departamento de Español y Literatura  
1               Departamento de Español y Literatura  
2               Departamento de Español y Literatura  
3               Departamento de Español y Literatura  
4               Departamento de Español y Literatura  
..                                               ...  
505                       Departamento de Ingeniería  
506  Decanatura de la Facultad de Ciencias Agrícolas  
507  Decanatura de la Facultad de Ciencias Agrícolas  
508                           Departamento de Física  
509               Departamento de Ciencias Acuáticas  

[510 rows x 3 columns]
In [89]:
import matplotlib.pyplot as plt

# Crear gráfico de barras para cada departamento
departamentos_unicos = resultados_totales['department'].unique()

# Iterar sobre cada departamento y graficar
for departamento in departamentos_unicos:
    # Filtrar los resultados para el departamento actual
    df_departamento = resultados_totales[resultados_totales['department'] == departamento]
    
    # Crear gráfico de barras
    plt.figure(figsize=(10, 6))
    plt.bar(df_departamento['userid'], df_departamento['total_inicios_sesion'])
    plt.xlabel('Docentes (userid)')
    plt.ylabel('Total de Inicios de Sesión')
    plt.title(f'Inicios de Sesión por Docente en {departamento}')
    plt.xticks(rotation=45)  # Rotar etiquetas del eje x si es necesario
    plt.tight_layout()  # Ajustar diseño para evitar recortes
    plt.show()
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
In [90]:
# 4. Login bar graph by department / Gráfico de barras de inicio de sesión por departamento
import matplotlib.pyplot as plt
import seaborn as sns

# Agrupar por 'department' y contar el número de inicios de sesión
inicios_sesion_por_departamento = nuevo_df.groupby('department').size().reset_index(name='total_inicios_sesion')

# Ordenar el DataFrame por total de inicios de sesión
inicios_sesion_por_departamento = inicios_sesion_por_departamento.sort_values(by='total_inicios_sesion', ascending=False)

# Crear el gráfico de barras
plt.figure(figsize=(12, 6))  # Ajustar el tamaño del gráfico
sns.barplot(data=inicios_sesion_por_departamento, x='total_inicios_sesion', y='department', hue='department', palette='viridis', legend=False)

# Añadir títulos y etiquetas
plt.title('Número Total de Inicios de Sesión por Departamento', fontsize=16)
plt.xlabel('Total de Inicios de Sesión', fontsize=14)
plt.ylabel('Departamento', fontsize=14)

# Mostrar el gráfico
plt.show()
No description has been provided for this image
In [91]:
# 5. Login boxplot graph by department / Gráfico de diagrama de caja de inicio de sesión por departamento
import matplotlib.pyplot as plt
import seaborn as sns

# Asegúrate de que 'nuevo_df' tenga los inicios de sesión individuales.
# Supongamos que 'timecreated' representa cada inicio de sesión.
nuevo_df['inicios'] = 1  # Crear una columna que cuente cada inicio de sesión

# Agrupar por 'department' y 'userid' para contar inicios de sesión
inicios_por_docente = nuevo_df.groupby(['department', 'userid']).size().reset_index(name='total_inicios_sesion')

# Crear el diagrama de caja
plt.figure(figsize=(12, 6))  # Ajustar el tamaño del gráfico
sns.boxplot(data=inicios_por_docente, x='total_inicios_sesion', y='department', hue='department', palette='viridis', legend=False)

# Añadir títulos y etiquetas
plt.title('Diagrama de Caja de Inicios de Sesión por Departamento', fontsize=16)
plt.xlabel('Total de Inicios de Sesión', fontsize=14)
plt.ylabel('Departamento', fontsize=14)

plt.tight_layout()  # Ajustar el layout
plt.show()
No description has been provided for this image
In [92]:
# 6. Login average by department / Promedio de inicio de sesión por departamento
# Calcular el promedio de inicios de sesión por departamento
promedio_inicios_por_departamento = nuevo_df.groupby('department').size().reset_index(name='total_inicios_sesion')

# Calcular el promedio
promedio_inicios_por_departamento['promedio_inicios'] = promedio_inicios_por_departamento['total_inicios_sesion'] / nuevo_df['department'].nunique()

# Mostrar el resultado
print(promedio_inicios_por_departamento[['department', 'promedio_inicios']])
                                           department  promedio_inicios
0     Decanatura de la Facultad de Ciencias Agrícolas          1.057143
1             Departamento de Administración en Salud          2.942857
2                               Departamento de Artes          0.457143
3                       Departamento de Bacteriología         19.085714
4                            Departamento de Biología         20.714286
5                  Departamento de Ciencias Acuáticas          0.028571
6                  Departamento de Ciencias Acuícolas          3.914286
7            Departamento de Ciencias Administrativas         56.657143
8                  Departamento de Ciencias Jurídicas          9.314286
9                  Departamento de Ciencias Naturales          6.028571
10                 Departamento de Ciencias Pecuarias          5.400000
11                  Departamento de Ciencias Sociales          2.885714
12  Departamento de Cultura Física, Recreación y D...          4.542857
13                         Departamento de Enfermería          9.571429
14               Departamento de Español y Literatura          2.000000
15                             Departamento de Física          1.685714
16               Departamento de Física y Electrónica         10.685714
17                          Departamento de Geografía          1.342857
18         Departamento de Geografía y Medio Ambiente         16.857143
19                Departamento de Idiomas Extranjeros         20.428571
20                        Departamento de Informática          5.657143
21              Departamento de Informática Educativa         46.400000
22                         Departamento de Ingeniería          0.542857
23  Departamento de Ingeniería Agronómica y Desarr...          8.914286
24               Departamento de Ingeniería Ambiental         17.714286
25              Departamento de Ingeniería Industrial         23.171429
26                Departamento de Ingeniería Mecánica         13.571429
27            Departamento de Ingeniería de Alimentos         14.657143
28  Departamento de Ingeniería de Sistemas y Telec...         32.771429
29          Departamento de Matemáticas y Estadística         20.057143
30                     Departamento de Psicopedagogía         27.371429
31                            Departamento de Química         16.657143
32               Departamento de Regencia de Farmacia          0.742857
33                Departamento de Regencia y Farmacia          2.628571
34                      Departamento de Salud Pública         83.428571
In [93]:
# 7. Quartiles of teachers by department / Cuartiles de profesores por departamento
# Agrupar por 'department' y contar el número de inicios de sesión
inicios_sesion_por_departamento = nuevo_df.groupby('department').size().reset_index(name='total_inicios_sesion')

# Calcular cuartiles
cuartiles = inicios_sesion_por_departamento['total_inicios_sesion'].quantile([0.25, 0.5, 0.75]).reset_index()
cuartiles.columns = ['Cuartil', 'Valor']

# Mostrar los cuartiles
print(cuartiles)
   Cuartil  Valor
0     0.25   96.5
1     0.50  326.0
2     0.75  685.0
In [ ]: